#include "move.h"
/**
 * @brief 模拟西门子 SWAP 指令
 */
Bool Swap(Bool enable, const void* inValue, uint8_t sizeBytes, void* outValue)
{
    if (!enable)
        return false;

    if (inValue == NULL || outValue == NULL)
        return false;

    switch (sizeBytes)
    {
        case 2: // WORD: 高低字节互换
        {
            uint16_t v = *(const uint16_t*)inValue;
            uint16_t r = (v >> 8) | (v << 8);
            *(uint16_t*)outValue = r;
            return true;
        }
        case 4: // DWORD: 高低字互换
        {
            uint32_t v = *(const uint32_t*)inValue;
            uint32_t r = (v >> 16) | (v << 16);
            *(uint32_t*)outValue = r;
            return true;
        }
        case 8: // LWORD: 高低双字互换
        {
            uint64_t v = *(const uint64_t*)inValue;
            uint64_t r = (v >> 32) | (v << 32);
            *(uint64_t*)outValue = r;
            return true;
        }
        default:
            return false;
    }
}
